package edu.stanford.nlp.parser.ensemble.maltparser.core.syntaxgraph;

import java.util.SortedSet;


import edu.stanford.nlp.parser.ensemble.maltparser.core.exception.MaltChainedException;
import edu.stanford.nlp.parser.ensemble.maltparser.core.syntaxgraph.node.TokenNode;

/**
*
*
* @author Johan Hall
*/
public interface TokenStructure extends Structure, LabeledStructure { 
	/**
	 * Adds a token node with index <i>n + 1</i>, where <i>n</i> is the index of the last token node. 
	 * 
	 * @return the added token node.
	 * @throws MaltChainedException
	 */
	public TokenNode addTokenNode() throws MaltChainedException;
	/**
	 * Adds a token node with index <i>index</i>.
	 * 
	 * @param index the index of the token node.
	 * @return the added token node.
	 */
	public TokenNode addTokenNode(int index) throws MaltChainedException;
	/**
	 * Returns the token node with index <i>index</i>.
	 * 
	 * @param index the index of the token node.
	 * @return a token node with index <i>index</i>.
	 * @throws MaltChainedException
	 */
	public TokenNode getTokenNode(int index);
	/**
	 * Returns the number of token nodes in the token structure (sentence).
	 * 
	 * @return the number of token nodes in the token structure (sentence).
	 */
	public int nTokenNode();
	/**
	 * Returns a sorted set of integers {s,...,n}, where each index i identifies a token node. Index <i>s</i> 
	 * is the first token node and index <i>n</i> is the last token node. 
	 * 
	 * @return a sorted set of integers {s,...,n}.
	 */
	public SortedSet<Integer> getTokenIndices();
	/**
	 * Returns the index of the last token node.
	 * 
	 * @return the index of the last token node.
	 */
	public int getHighestTokenIndex();
	/**
	 *  Returns <i>true</i> if the token structure (sentence) has any token nodes, otherwise <i>false</i>.
	 * 
	 * @return <i>true</i> if the token structure (sentence) has any token nodes, otherwise <i>false</i>.
	 */
	public boolean hasTokens();
	/**
	 * Returns the sentence ID
	 * 
	 * @return the sentence ID
	 */
	public int getSentenceID();
	/**
	 * Sets the sentence ID
	 * 
	 * @param sentenceID a sentence ID
	 */
	public void setSentenceID(int sentenceID);
}
